GtkCssProvider: Allow empty selector.
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 15 Apr 2010 23:44:50 +0000 (01:44 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Sat, 4 Dec 2010 14:37:05 +0000 (15:37 +0100)
universal selector is implied, so things like this work:

:active {}
:insensitive{}

gtk/gtkcssprovider.c

index ffb23b84f1434bff84742ff660040e23f485f98c..71d58c71af19822d2b7ae22550273f7aec06b3ea 100644 (file)
@@ -177,6 +177,12 @@ selector_path_prepend_glob (SelectorPath *path)
   path->elements = g_slist_prepend (path->elements, elem);
 }
 
+static gint
+selector_path_depth (SelectorPath *path)
+{
+  return g_slist_length (path->elements);
+}
+
 static SelectorStyleInfo *
 selector_style_info_new (SelectorPath *path)
 {
@@ -589,7 +595,8 @@ parse_selector (GtkCssProvider  *css_provider,
 
   *selector_out = NULL;
 
-  if (scanner->token != G_TOKEN_IDENTIFIER)
+  if (scanner->token != ':' &&
+      scanner->token != G_TOKEN_IDENTIFIER)
     return G_TOKEN_IDENTIFIER;
 
   path = selector_path_new ();
@@ -611,6 +618,10 @@ parse_selector (GtkCssProvider  *css_provider,
 
   if (scanner->token == ':')
     {
+      /* Add glob selector if path is empty */
+      if (selector_path_depth (path) == 0)
+        selector_path_prepend_glob (path);
+
       /* Pseudo-class scanning */
       css_provider_push_scope (css_provider, SCOPE_PSEUDO_CLASS);
       g_scanner_get_next_token (scanner);